# 使用keytool 生成证书
keytool -genkey -alias test -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -keystore D:/keys/test.keystore -storepass 123456
# 按照新版规范重新生成
# keytool -importkeystore -srckeystore D:/keys/test.keystore -destkeystore D:/keys/test.keystore -deststoretype pkcs12

# 通过 keystore 导出cer文件
keytool -keystore D:/keys/test.keystore -export -alias test -file D:/keys/test.cer

keytool -genkey -alias client -keypass 123456 -keyalg RSA -keysize 1024 -validity 365 -storetype PKCS12 -keystore D:/keys/client.p12 -storepass 123456

# 验证流程
# 1. 单服务端 ssl
# 访问服务端，拿到服务端 cer 证书，去本地信任CA机构验证该证书是否合法，之后还用该证书进行数据加密
# 2. 双向 ssl


# 格式概述
# .key 密钥文件
# .csr 证书申请文件
# .crt 只要包含公钥的证书文件 - 一般客户端使用
# .pem 包含公钥私钥的证书文件 - 一般服务器使用

# openssl 生成私钥
openssl genrsa -des3 -out server.pass.key 2048
# 去除私钥中的密码 - 没有密码的文件是 server.key
openssl rsa -in server.pass.key -out server.key
# 生成csr（证书签名请求）
openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=/L=/O=/OU=/CN=emqxtest.fxo2opt.com"
# 生成自签名证书 crt
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
# 生成 pem 格式证书
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.pem

# 以根证书签发实体证书
openssl x509 -req -days 365 -in server.csr -CA server.pem -CAkey server.key -CAcreateserial -out sub_server.pem -sha256 -extensions v3_req

# --------- 格式转换 ---------
# pem 转换 crt
openssl x509 -in mqtt_192.168.100.222_ca.pem -out mqtt_192.168.100.222_ca.crt
# pem 转换 key
openssl rsa -in privkey.pem -out privkey.key